Remediation scripts/Enable auditing for the SQL server/PowerShell/Enable-AzSecuritySQLAuditing.ps1 (71 lines of code) (raw):

Write-Verbose "Checking for Azure module..." $AzModule = Get-Module -Name "Az.*" -ListAvailable if ($AzModule -eq $null) { Write-Verbose "Azure PowerShell module not found" #check for Admin Privleges $currentPrincipal = New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent()) if(-not ($currentPrincipal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator))){ #No Admin, install to current user Write-Warning -Message "Can not install Az Module. You are not running as Administrator" Write-Warning -Message "Installing Az Module to Current User Scope" Install-Module Az -Scope CurrentUser -Force Install-Module Az.Security -Scope CurrentUser -Force } Else{ #Admin, install to all users Install-Module Az -Force Install-Module Az.Security -Force } } #Login to Azure Login-AzAccount #Get All Subs $Subscriptions = Get-AzSubscription #Loop Through Subs foreach($Subscription in $Subscriptions){ $Id = ($Subscription.Id) Select-AzSubscription $Id #Get Security Task for Storage Security $SecurityTasks += Get-AzSecurityTask | Where-Object {$_.RecommendationType -eq "Enable auditing for the SQL server"} } #Loop Thru tasks foreach($SecurityTask in $SecurityTasks){ $SQLDatabases = Get-AzSqlDatabase -ServerName ($SecurityTask.ResourceId.Split("/")[8]) -ResourceGroupName ($SecurityTask.ResourceId.Split("/")[4]) Write-Host ($SecurityTask.ResourceId) Write-Host "Which type of auditing storage do you want to use?" $StorageType = Read-Host "Storage, LogA or EventHub" if($StorageType -eq "Storage"){ $StorageName = Read-Host "Enter the name of the storage account" Set-AzSqlServerAuditing -State Enabled -ResourceGroupName ($SecurityTask.ResourceId.Split("/")[4]) -ServerName ($SecurityTask.ResourceId.Split("/")[8]) -StorageAccountName "$StorageName" foreach($SQLDatabase in $SQLDatabases){ if(($SQLDatabase.ResourceId.Split("/")[10]) -ne "master"){ Set-AzSqlDatabaseAuditing -State Enabled -ResourceGroupName ($SecurityTask.ResourceId.Split("/")[4]) -DatabaseName ($SQLDatabase.ResourceId.Split("/")[10]) -StorageAccountName "$StorageName" } } } if($StorageType -eq "LogA"){ $WorkspaceName = Read-Host "Enter the name of the workspace to use" $Workspace = Get-AzOperationalInsightsWorkspace | Where-Object {$_.Name -eq "$WorkspaceName"} Set-AzSqlServerAuditing -State Enabled -ResourceGroupName ($SecurityTask.ResourceId.Split("/")[4]) -ServerName ($SecurityTask.ResourceId.Split("/")[8]) -LogAnalytics -WorkspaceResourceId ($Workspace.ResourceId) foreach($SQLDatabase in $SQLDatabases){ if(($SQLDatabase.ResourceId.Split("/")[10]) -ne "master"){ Set-AzSqlDatabaseAuditing -State Enabled -ResourceGroupName ($SecurityTask.ResourceId.Split("/")[4]) -DatabaseName ($SQLDatabase.ResourceId.Split("/")[10]) -LogAnalytics -WorkspaceResourceId ($Workspace.ResourceId) } } } if($StorageType -eq "EventHub"){ $RGName = Read-Host "Enter the Resource Group of the eventhub to use" $Namespace = Read-Host "Enter the namespace of the event hub to use" $EventHub = Get-AzEventHub -ResourceGroupName "$RGName" -Namespace "$Namespace" $EventHubAuthRules = Get-AzEventHubAuthorizationRule -ResourceGroupName "$RGName" -Namespace "$Namespace" Write-Host ($EventHubAuthRules.Name) $Rule = Read-Host "Which auth rule do you want to use?" $EventHubAuthRule = $EventHubAuthRules | Where-Object {$_.Name -eq "$Rule"} Set-AzSqlServerAuditing -State Enabled -ResourceGroupName ($SecurityTask.ResourceId.Split("/")[4]) -ServerName ($SecurityTask.ResourceId.Split("/")[8]) -EventHubName ($EventHub.Name) -EventHubAuthorizationRuleResourceId ($EventHubAuthRule.Id) foreach($SQLDatabase in $SQLDatabases){ if(($SQLDatabase.ResourceId.Split("/")[10]) -ne "master"){ Set-AzSqlDatabaseAuditing -State Enabled -ResourceGroupName ($SecurityTask.ResourceId.Split("/")[4]) -DatabaseName ($SQLDatabase.ResourceId.Split("/")[10]) -EventHubName ($EventHub.Name) -EventHubAuthorizationRuleResourceId ($EventHubAuthRule.Id) } } } }